Bevor du den Schmerz der Fehlerdiagnose durchmachst, benutze das Test Framework, um zu überprüfen, ob die Standardtests ordnungsgemäß funktionieren. Wenn sie nicht vollständig ausgeführt werden, liegt möglicherweise eine defekte Installation vor.
Die Fehlerdiagnose von FreeCAD wird durch einige interne Mechanismen unterstützt. Die Kommandozeilenversion von FreeCAD bietet einige Optionen für die Fehlerdiagnoseunterstützung.
Dies sind die derzeit anerkannten Optionen in FreeCAD 0.19:
Grundlegende Optionen:
-v [ --version ] Druckt Versionszeichenkette -h [ --help ] Druckt Hilfsmeldung aus -c [ --console ] Startet im Konsolenmodus --response-file arg Kann auch mit'@name' angegeben werden --dump-config Dump der Konfiguration --get-config arg Gibt den Wert des angegebenen Konfigurationsschlüssels aus
Konfiguration:
-l [ --write-log ] Schreibt eine Log-Datei nach: $HOME/.local/share/FreeCAD/FreeCAD.log (Linux) $HOME/Library/Application/Support/FreeCAD/FreeCAD.log (macOS) %APPDATA%\FreeCAD\FreeCAD.log (Windows) --log-file arg Anders als bei --write-log wird hier in eine Datei mit beliebigem Namen geschrieben -u [ --user-cfg ] arg Benutzerkonfigurationsdatei, um Benutzereinstellungen zu laden/speichern -s [ --system-cfg ] arg Systemkonfigurationsdatei, um Systemeinstellungen zu laden/speichern -t [ --run-test ] arg Test-Level - oder 0 für alles -M [ --module-path ] arg Zusätzliche Modulpfade -P [ --python-path ] arg Zusätzliche Python-Pfade --single-instance Ermöglicht eine (einzige) Instanz der Applikation zu starten
Wenn Du eine FreeCAD Version der Anfangsphase der Entwicklungskurve verwendest, kann sie "abstürzen". Du kannst dabei helfen, diese Probleme zu lösen, indem Du einen "Rückverfolgung" an die Entwickler schickst. Um dies zu tun, musst Du ein "Fehlerdiagnose build" der Software haben. "Fehlerdiagnose build" ist ein Parameter, der zur Kompilierungszeit gesetzt wird, also musst Du entweder FreeCAD selbst kompilieren oder Dir eine vorkompilierte "Fehlerdiagnose" Version besorgen.
Linux Fehlerdiagnose →
Voraussetzungen:
Schritte: Gib in deinem Terminalfenster folgendes ein:
Finde das FreeCAD-Programm auf deinem System:
$ whereis freecad
freecad: /usr/local/freecad <--- for example
$ cd /usr/local/freecad/bin
$ gdb FreeCAD
GNUdebugger gibt einige Initialisierungsinformationen aus. Die (gdb) zeigt, dass der GNUDebugger im Terminal läuft, das nun eingegeben wird:
(gdb) handle SIG33 noprint nostop
(gdb) run
FreeCAD wird nun gestartet. Führe die Schritte aus, die dazu führen, dass FreeCAD abstürzt oder einfriert, und gib dann in das Terminalfenster ein:
(gdb) bt
Dies führt zu einer langen Auflistung dessen, was das Programm beim Absturz oder Einfrieren genau getan hat. Füge dies deinem Problembericht bei.
(gdb) bt full
Drucke auch die Werte der lokalen Variablen. Dies kann mit einer Zahl kombiniert werden, um die Anzahl der angezeigten Rahmen zu begrenzen.
macOS Debugging →
Voraussetzungen:
Schritte: Gib das Folgende in Dein Terminalfenster ein:
$ cd FreeCAD/bin
$ lldb FreeCAD
LLDB gibt einige Initialisierungsinformationen aus. Die (lldb) zeigt an, dass das Fehlerdiagnoseprogramm im Terminal läuft, jetzt eingegeben:
(lldb) run
FreeCAD wird nun gestartet. Führe die Schritte aus, die dazu führen, dass FreeCAD abstürzt oder einfriert, und gib dann in das Terminalfenster ein:
(lldb) bt
Dies führt zu einer längeren Auflistung dessen, was das Programm genau getan hat, als es abgestürzt ist oder eingefroren ist. Füge dies deinem Problembericht bei.
(Anwendbar auf Linux und macOS)
Manchmal ist es hilfreich zu verstehen, welche Bibliotheken FreeCAD lädt, insbesondere wenn mehrere Bibliotheken mit demselben Namen, aber unterschiedlichen Versionen geladen werden (Versionskollision). Um zu sehen, welche Bibliotheken von FreeCAD geladen werden, wenn es abstürzt, solltest du ein Terminal öffnen und es im Debugger ausführen. In einem zweiten Terminalfenster findest du die Prozess ID von FreeCAD heraus:
ps -A | grep FreeCAD
Verwende die zurückgegebene ID und übergib sie an lsof
:
lsof -p process_id
Dadurch wird eine lange Liste der geladenen Ressourcen gedruckt. Wenn z.B. herausgefunden werden soll, ob mehr als eine Coin3d Bibliotheksversion geladen ist, blättere durch die Liste oder suche direkt nach Coin in der Ausgabe:
lsof -p process_id | grep Coin
Für einen moderneren Ansatz zur Fehlerdiagnose bei Python siehe diese Beiträge:
winpdb Fehlerdiagnose →
Hier ist ein Beispiel für die Verwendung von Winpdb in FreeCAD:
Wir benötigen das Python-Fehlerdiagnoseprogramm Winpdb. Wenn es nicht installiert ist, lässt sich das auf Ubuntu/Debian wie folgt tun:
sudo apt-get install winpdb
Jetzt werden wir das Fehlerdiagnoseprogramm einrichten.
Jetzt werden wir ein Python-Test-Skript in FreeCAD Schritt-für-Schritt ablaufen lassen.
import rpdb2
rpdb2.start_embedded_debugger("test")
import FreeCAD
import Part
import Draft
print "hello"
print "hello"
import Draft
points=[FreeCAD.Vector(-3.0,-1.0,0.0),FreeCAD.Vector(-2.0,0.0,0.0)]
Draft.makeWire(points,closed=False,face=False,support=None)
VS Code Fehlerdiagnose →
Voraussetzungen:
# In a cmd window that has a path to you local Python 3:
pip install ptvsd
# Then if your Python is installed in C:\Users\<userid>\AppData\Local\Programs\Python\Python37
# and your FreeCAD is installed in C:\freecad\bin
xcopy "C:\Users\<userid>\AppData\Local\Programs\Python\Python37\Lib\site-packages\ptvsd" "C:\freecad\bin\Lib\site-packages\ptvsd"
Visual Studio Code Dokumentation für die Fern Fehlerdiagnose
Schritte:
import ptvsd
print("Waiting for debugger attach")
# 5678 is the default attach port in the VS Code debug configurations
ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True)
ptvsd.wait_for_attach()
"configurations": [ { "name": "Python: Attacher", "type": "python", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "." } ] },
from sys import path
sys.path.append('/path/to/site-packages')
Dabei zeigt der Pfad auf das Verzeichnis, in dem ptvsd installiert wurde.
In der Mac-Version ist es /Applications/FreeCAD.App/Contents/Resources/bin/python
Du kannst es auf deinem System lokalisieren durch Eingabe von
import sys
print(sys.executable)
in die FreeCAD-Python-Konsole.
LiClipse Debugging →
> ./your location/FreeCAD_xxx.AppImage --appimage-extract
> cd squashfs-root/
squashfs-root> ./usr/bin/freecadcmd
your loc/squashfs-root/usr/bin/python
.pydevd.py
in your liclipse installation.
your location/liclipse/plugins/org.python.pydev.xx/pysrc
.import sys; sys.path.append("path ending with /pysrc")
import pydevd; pydevd.settrace()
squashfs-root> ./usr/bin/freecad
pydevd.settrace()
trigger) from within freecad, as you would normally do.See the main article about Pyzo.
Für Entwickler, die tiefer in den OpenCasCade Kernel einsteigen müssen, hat der Benutzer @abdullah eine Forumsbetrag Orientierung erstellt, in der die Vorgehensweise diskutiert wird.